package com.tarzan.system.service;


import com.baomidou.mybatisplus.extension.service.IService;
import com.tarzan.api.model.request.menu.InsertMentReq;
import com.tarzan.api.model.request.menu.SysMenuReq;
import com.tarzan.api.model.request.menu.UpdateMentReq;
import com.tarzan.api.model.response.ment.RouterVo;
import com.tarzan.api.model.response.ment.SysMenuResp;
import com.tarzan.system.entity.SysMenu;

import java.util.List;

/**
 * <p>
 * 菜单权限表 服务类
 * </p>
 *
 * @author liujinshan
 * @since 2020-07-09
 */
public interface ISysMenuService extends IService<SysMenu> {
    /**
     * 根据用户id查询用户所拥有的菜单
     * @param menu
     * @param userId
     * @return
     */
    List<SysMenuResp> selectMenuList(SysMenuReq menu, Long userId);

    /**
     * 包装查询的结果
     * @param userName
     * @return java.util.List<com.jinshan.happy.vo.response.RouterVo>
     * @Date 2020/9/28 10:56
     * @Author liujinshan
     **/
    List<RouterVo> buildMenus(String userName);

    /**
     * 根据用户id查询菜单权限
     * @param userId
     * @return
     */
    List<String> selectMenuPermsByUserId(Long userId);

    /**
     * 根据ID查询菜单详情
     * @param menuId
     * @return com.jinshan.happy.vo.response.SysMenuResp
     * @Date 2020/9/30 9:19
     * @Author liujinshan
     **/
    SysMenuResp findMenuDetailById(Long menuId);

    /**
     * 插入菜单
     * @param insertMenuReq
     * @return void
     * @Date 2020/9/30 15:43
     * @Author liujinshan
     **/
    void insertMenu(InsertMentReq insertMenuReq);


    /**
     * 更新菜单
     * @param updateMentReq
     * @return void
     * @Date 2020/9/30 15:52
     * @Author liujinshan
     **/
    void update(UpdateMentReq updateMentReq);

    /**
     * 删除菜单，删除父菜单时同时删除子菜单。
     * @param menuId
     * @return void
     * @Date 2020/10/9 8:50
     * @Author liujinshan
     **/
    void delete(Long menuId);

    /**
     * 退出登陆
     * @param authHeader
     * @return void
     * @Date 2020/10/23 14:51
     * @Author liujinshan
     **/
    void removeLoginInfoByToken(String authHeader);
}
